//
//  CZStatusViewModel.swift
//  Weibo30
//
//  Created by apple on 16/8/12.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

//  微博数据处理的ViewModel 对应的视图是首页自定义的cell(CZStatusTableViewCell)
class CZStatusViewModel: NSObject {

    //  提供微博数据模型
    var status: CZStatus?
    
    //  转发数内容
    var retweetCountContent: String?
    //  评论数内容
    var commentCountContent: String?
    //  赞数内容
    var unlikeCountContent: String?
    
    //  转发微博内容
    var retweetContent: String?
    //  来源数据
    var sourceContent: String?
    
    //  会员等级图片
    var mbrankImage: UIImage?
    //  认证类型等级图片
    var verifiedTypeImage: UIImage?
    
    /*
        //  判断时间是否是今年
                //  判断是否是今天
                    //  判断是否是1分钟之内
                        //  - 刚刚
                    //  判断是否是1小时之内
                        //  - xx分钟前
                    //  其它
                        //  - xx小时前
                //  判断是否是昨天
                    //  - 昨天 10:10
                //  其他
                    08-14 08:41
        //  不是今年
            //  2015-10-20 20:10
    
    */
    
    var timeContent: String? {
    
         //  Sun Aug 14 08:37:31 +0800 2016
        
        //  判断发微博时间是否为nil
        guard let createDateStr = status?.created_at else {
            return nil
        }
        
        return NSDate.sinaDate(createDateStr).sinaDateString
        
        
//        let createDate = NSDate.sinaDate(createDateStr)
//        return createDate.sinaDateString
        
//        //  代码执行到此,表示发微博时间不为nil,表示没有问题
//        let dt = NSDateFormatter()
//        //  指定格式化方式
//        dt.dateFormat = "EEE MMM dd HH:mm:ss z yyyy"
//        //  指定本地化信息
//        dt.locale = NSLocale(localeIdentifier: "en_US")
//        //  通过格式化方式转成成时间对象
//        //  当前时间加上多少秒
//        //  NSDate().dateByAddingTimeInterval(-3600-1000)
//        let createDate = dt.dateFromString(createDateStr)!
        
        
//        //  把时间对象转成时间字符串
//        
//        if isThisYear(createDate) {
//            //  是今年
//            //  日历对象
//            let calendar = NSCalendar.currentCalendar()
//            
//           
//            if calendar.isDateInToday(createDate) {
//                //  是今天
////                createDate.timeIntervalSinceDate(<#T##anotherDate: NSDate##NSDate#>)
//                //  获取发微博时间距离当前时间差多少秒
//                let timeInterVal = abs(createDate.timeIntervalSinceNow)
//                
//                if timeInterVal < 60 {
//                    return "刚刚"
//                } else if timeInterVal < 3600 {
//                    
//                    let result = timeInterVal / 60
//                    
//                    return "\(Int(result))分钟前"
//                    
//                } else {
//                    let result = timeInterVal / 3600
//                    return "\(Int(result))小时前"
//                }
//                
//            } else if calendar.isDateInYesterday(createDate) {
//                //  昨天
//                dt.dateFormat = "昨天 HH:mm"
//            } else {
//                //  其它
//                dt.dateFormat = "MM-dd HH:mm"
//            }
//            
//            
//            
//            
//            
//        } else {
//            //  不是今年 2015-10-20 20:10
//            dt.dateFormat = "yyyy-MM-dd HH:mm"
//        }
//        
//        return dt.stringFromDate(createDate)
        
    }
    
    //  原创微博的富文本
    var origianlAttributedString: NSAttributedString?
    //  转发微博的富文本
    var retweetAttributedString: NSAttributedString?
    
    
    
    //  通过重载构造函数初始化当前对象
    init(status: CZStatus) {
        super.init()
        self.status = status
        //  处理转发,评论,赞的逻辑处理
        retweetCountContent = handleCount(status.reposts_count, defaultTitle: "转发")
        commentCountContent = handleCount(status.comments_count, defaultTitle: "评论")
        unlikeCountContent = handleCount(status.attitudes_count, defaultTitle: "赞")
        //  处理转发微博
        handleRetweetContent(status)
        //  处理来源数据
        handleSource(status.source ?? "")
        //  处理会员等级图片
        handleMbrankImage(status.user?.mbrank ?? 0)
        //  处理认证类型等级图片
        handleVerifiedTypeImage(status.user?.verified_type ?? -1)
        
        //  处理微博首页的表情描述富文本
        origianlAttributedString = handleEmoticonContentWithStatus(status.text!)
    }
    
    //  处理微博数据里面的逻辑...
    
    //  status-> 微博内容
    private func handleEmoticonContentWithStatus(status: String) -> NSAttributedString {
        
        let result = NSMutableAttributedString(string: status)
        
        
        //  使用正则匹配表情描述
        
        //  第一个参数 : 正则表达式
        //  第二个参数 : 闭包  -> 1. 匹配的个数, 2.匹配内容的指针, 3. 匹配范围的指针 4, 是否停止
        
        var matchResultArray = [CZMatchResult]()
        
        (status as NSString).enumerateStringsMatchedByRegex("\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]") { (matchCount, matchString, matchRange, _) -> Void in
            //  获取指针对应的内容
//            print(matchString.memory)
            //  判断是否能够转成String类型
            if let chs = matchString.memory as? String {
                
                //  存储匹配的表情描述与表情描述对应的范围
                let matchResult = CZMatchResult(matchString: chs, matchRange: matchRange.memory)
                matchResultArray.append(matchResult)
            }
           
        }
        
        //  reverse 数组翻转
        for value in matchResultArray.reverse() {
            
            //  查找本地的表情模型
            if let emoticon = CZEmoticonTools.sharedTools.searchEmoticonWithChs(value.matchString) {
                //  把表情模型转成表情富文本
                //  取到表情模型里面的图片路径, 创建UIImage对象,然后让其转成富文本
                //  通过表情模型和字体对象创建表情富文本
                let attributedStr = NSAttributedString.attributedStringWithEmoticon(emoticon, font: UIFont.systemFontOfSize(StatusFontSize))
                //  通过匹配的表情描述的范围替换指定表情富文本
                result.replaceCharactersInRange(value.matchRange, withAttributedString: attributedStr)
            
            }
            
        }
        
        
        return result
    
    }
    
    
    
    
    
    
    
//    //  根据时间判断是否是今年
//    private func isThisYear(createDate: NSDate) -> Bool {
//        
//        let dt = NSDateFormatter()
//        //  指定格式化方式
//        dt.dateFormat = "yyyy"
//        //  指定本地化信息
//        dt.locale = NSLocale(localeIdentifier: "en_US")
//        //  获取发微博时间的年份
//        let createDateYear = dt.stringFromDate(createDate)
//        //  获取当前时间的年份
//        let currentDateYear = dt.stringFromDate(NSDate())
//        //  对比年份是否相同
//        return createDateYear == currentDateYear
//       
//       
//        
//    }
    
    //  处理认证类型等级图片
    private func handleVerifiedTypeImage(verifiedType: Int) {
    
        //认证类型等级 -1 没有认证 ，0 认证用户，2，3，5 企业认证 ， 220 达人
        
        switch verifiedType {
        case 0:
            verifiedTypeImage = UIImage(named: "avatar_vip")
        case 2, 3 ,5:
            verifiedTypeImage = UIImage(named: "avatar_enterprise_vip")
        case 220:
            verifiedTypeImage = UIImage(named: "avatar_grassroot")
        default:
            verifiedTypeImage = nil
            
        }
    
    }
    
    //  处理会员等级图片
    private func handleMbrankImage(mbrank: Int) {
        
        if mbrank >= 1 && mbrank <= 6  {
            //  合法的会员等级范围
            mbrankImage = UIImage(named: "common_icon_membership_level\(mbrank)")
        }
        
    
    }
    
    
    //  处理来源数据
    private func handleSource(source: String) {
        //  判断字符串中是否包含这样关键字符串
        if source.containsString("\">") && source.containsString("</") {
            //  开始光标位置
            let startIndex = source.rangeOfString("\">")!.endIndex
            //  结束光标位置
            let endIndex = source.rangeOfString("</")!.startIndex
            
            //  获取指定范围的字符串
            let result = source.substringWithRange(startIndex..<endIndex)
            //  设置给来源数据
            sourceContent = "来自: " + result
        }
        
        
        
    }
    
    
    //  处理转发微博内容的拼接逻辑
    private func handleRetweetContent(status: CZStatus) {
        //  判断是否有转发微博内容
        if status.retweeted_status != nil {
            //  取到内容
            //  取到转发的用户昵称
            guard let text = status.retweeted_status?.text, let name = status.retweeted_status?.user?.screen_name else {
                return
            }
            
            //  拼接转发微博内容
            let result = "@\(name): \(text)"
            
            retweetContent = result
            
            //  设置转发微博富文本
            retweetAttributedString = handleEmoticonContentWithStatus(retweetContent!)
            
            
        }
        
        
    
    }
    
    //  处理转发, 评论,赞数的逻辑
    private func handleCount(count: Int, defaultTitle: String) -> String {
        //  判断传入的参数是否大于0
             //     判断是否大于等于10000
                    //  显示 1.x万, ...
            // 不是大于等于10000
                    //  显示当前的数据
        
        //  不大与0 
            //  显示原始文本
        
        if count > 0 {
        
            if count >= 10000 {
            
                let result = CGFloat(count / 1000) / 10
                
                
                var resultStr = "\(result)万"
                //  判断字符串中是否包含0
                if resultStr.containsString(".0") {
                
                    resultStr = resultStr.stringByReplacingOccurrencesOfString(".0", withString: "")
                }
                return resultStr
                
                
            } else {
                return "\(count)"
            }
            
            
        } else {
        
            return defaultTitle
        }
        
        
        
        
        
        
    }
    
    
    
    
    
    
}
